package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.product.entity.BaseAttrInfo;
import com.atguigu.gmall.product.entity.BaseAttrValue;
import com.atguigu.gmall.product.entity.BaseSaleAttr;
import com.atguigu.gmall.product.entity.SpuSaleAttr;
import com.atguigu.gmall.product.service.BaseAttrInfoService;
import com.atguigu.gmall.product.service.BaseAttrValueService;
import com.atguigu.gmall.product.service.BaseSaleAttrService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @ClassName AttrController
 * @Description 此类描述:属性
 * @Author dangchen
 * @DateTime 2022-10-31 18:08
 * @Version 1.0
 */
@RestController
@RequestMapping("admin/product/")
@Slf4j
public class AttrController {

    @Autowired
    BaseAttrInfoService baseAttrInfoService;

    @Autowired
    BaseAttrValueService baseAttrValueService;

    @Autowired
    BaseSaleAttrService baseSaleAttrService;

    /**
     * 查询spu的销售属性名和值 的列表；
     * 方便在sku录入的时候，选择这个sku到底是那种销售属性组合
     * @param spuId
     * @return
     */
    @GetMapping("spuSaleAttrList/{spuId}")
    public Result spuSaleAttrList(@PathVariable Long spuId){
        List<SpuSaleAttr> spuSaleAttrs =  baseSaleAttrService.getSpuSaleAttrList(spuId);
        return Result.ok(spuSaleAttrs);
    }

    /**
     * 获取销售属性
     * @return
     */
    @GetMapping("baseSaleAttrList")
    public Result baseSaleAttrList(){
        List<BaseSaleAttr> list = baseSaleAttrService.list();
        return Result.ok(list);
    }

    /**
     * http://127.0.0.1/admin/product/attrInfoList/1/4/15
     * 查询分类下的平台属性
     * 请求：
     *   请求首行：
     *      GET：请求方式     [@XxxMapping]
     *      /haha： 请求路径  [] @PathVariable 路径中的变化部分
     *      ?k=v：查询字符串（get的参数都在这里）   @RequestParam 取出请求参数
     *   请求头：  @RequestHeader
     *   请求体：
     *     Post: 表单提交：k=v&k=v  @RequestParam
     *     Post: json             @RequestBody：请求体的数据
     *     文件（多部件）： 流        @RequestPart： 取出某个部件
     *          inpuy type="text/file"
     * Go、C++
     */
    @GetMapping("attrInfoList/{category1Id}/{category2Id}/{category3Id}")
    public Result attrInfoList(@PathVariable Long category1Id,
                               @PathVariable Long category2Id,
                               @PathVariable Long category3Id){
        //数据从哪来？接到前端的数据
        //数据怎么处理？定义service功能，进行处理【处理逻辑甩给service】
        //数据给哪去？处理完成后，前端需要我们返回一个数据
        List<BaseAttrInfo> list =  baseAttrInfoService.getAttrInfoList(category1Id,category2Id,category3Id);
        return Result.ok(list);
    }

    /**
     * 保存属性/修改属性
     * @RequestBody  可以将接到的json数据转为指定的Bean对象
     * http://127.0.0.1/admin/product/saveAttrInfo
     * @return
     */
    @PostMapping("saveAttrInfo")
    public Result saveAttrInfo(@RequestBody BaseAttrInfo baseAttrInfo){
        baseAttrInfoService.saveAttrInfo(baseAttrInfo);
        return Result.ok();
    }

    /**
     * 根据平台属性ID获取平台属性对象数据
     * http://api.gmall.com/admin/product/getAttrValueList/{attrId}
     * @return
     */
    @GetMapping("getAttrValueList/{attrId}")
    public Result getAttrValueList(@PathVariable Long attrId){
        List<BaseAttrValue> attrValues = baseAttrValueService.getAttrValueList(attrId);
        return Result.ok(attrValues);
    }
}
